#include<iostream>
using namespace std;
#include<stack>
#include<vector>

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        stack<int> st;
        int pushi = 0, popi = 0;
        
        //st.push(pushV[pushi++]);
        int flag = 1;//是否为第一次使用
        while((!st.empty() || pushi < pushV.size()) || flag){
            flag = 0;
            if(pushi < pushV.size() && pushV[pushi] != popV[popi]){
                st.push(pushV[pushi++]);
            }
            else{
                if(pushi < pushV.size()) st.push(pushV[pushi++]);
                //出栈
                int top = st.top();
                while(!st.empty()){
                    if(top == popV[popi]){
                        st.pop();
                        ++popi;
                    }
                    else break;
                    if(!st.empty()) top = st.top();
                }
                //如果出现了popV中和栈顶不一样的元素，栈不会为空
                if(!st.empty() && pushi == pushV.size()) return false;
            }
        }
        return true;
    }
};
